package org.argus.job.server.system.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.argus.common.mybatis.base.BaseEntity;
import org.argus.job.common.enums.*;

/**
 * 任务运行实例信息
 * @Author 刘文/Cliff Liu
 * @Date 2024/8/26
 */
@TableName("job_instance_info")
@Data
public class InstanceInfoEntity extends BaseEntity {
    /**
     * 任务ID
     */
    private Long jobId;

    /**
     * 任务所属应用的ID，冗余提高查询效率
     */
    private Long appId;

    /**
     * 任务实例参数(静态)
     */
    private String jobParams;
    /**
     * 任务实例参数（动态）
     */
    private String instanceParams;

    /**
     * 任务实例类型
     */
    private InstanceType instanceType;
    /**
     * 处理器类型（内建，外部）
     */
    private ProcessorType processorType;

    /**
     * 处理器信息
     */
    private String processorInfo;

    /**
     * 该任务实例所属的 workflow ID，仅 workflow 任务存在
     */
    private Long wfInstanceId;

    /**
     * 每台机器的处理线程数上限
     */
    private Integer threadConcurrency;

    private TimeExpressionType timeExpressionType;

    /**
     * 子任务重试次数（任务本身的重试机制由server控制）
     */
    private int taskRetryNum;

    /**
     * 日志配置
     */
    @TableField(exist = false)
    private String logConfig;

    /**
     * 任务实例状态
     */
    private InstanceStatus status;

    /**
     * 执行结果（允许存储稍大的结果）
     */
    private String result;
    /**
     * 预计触发时间
     */
    private Long expectedTriggerTime;
    /**
     * 实际触发时间
     */
    private Long actualTriggerTime;

    /**
     * 整个任务的总体超时时间
     */
    @TableField("instance_timeout_ms")
    private Long instanceTimeoutMS;

    /**
     * 结束时间
     */
    private Long finishedTime;
    /**
     * 最后上报时间
     */
    private Long lastReportTime;
    /**
     * TaskTracker 地址
     */
    private String taskTrackerAddress;
    /**
     * 总共执行的次数（用于重试判断）
     */
    private Long runningTimes;

    /**
     * 高级运行时配置
     */
    private String advancedRuntimeConfig;

    /**
     * 暂只支持 STANDALONE
     */
    private ExecuteType executeType = ExecuteType.STANDALONE;
}
